/*************************************************************************
	> File Name: 013.实现一个能输出所在函数及行号的打印Log的函数.c
	> Author: Maureen 
	> Mail: Maureen@qq.com 
	> Created Time: 三  8/25 20:24:24 2021
 ************************************************************************/

#include <stdio.h>

//__FILE__ 以字符串形式返回所在文件名称
//__func__ 以字符串形式返回所在函数名称
//__LINE__ 以整数形式返回代码行号

//条件式编译 本文件编译方式：gcc -DDEBUG xx.c
#ifdef DEBUG
#define log(frm, argc...) { \
    printf("%s[%s : %d] ", __FILE__, __func__, __LINE__);\
    printf(frm, ##argc); \
    printf("\n"); \
}
#else
#define log(frm, argc...)
#endif

#define concat(a, b) a##b

void func(int a) {
    a += 1;
    log("%d", a);
    return ;
}

int main() {
    int a = 123;
    func(a);
    log("%d", a);
    log("hello world");
    int abcdef = 0;
    concat(abc, def) = 24;
    log("%d", abcdef); //24

    return 0;
}

//运行结果：
//013.实现一个能输出所在函数及行号的打印Log的函数.c[func : 29] 124
//013.实现一个能输出所在函数及行号的打印Log的函数.c[main : 36] 123
//013.实现一个能输出所在函数及行号的打印Log的函数.c[main : 37] hello world
//013.实现一个能输出所在函数及行号的打印Log的函数.c[main : 40] 24
